﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Navigation;
using System.Windows.Shapes;
using SystemX.Infrastructure;

namespace SalePoints
{
	public partial class MainPage : UserControl
	{
		public MainPage()
		{
			InitializeComponent();

			Loaded += (s, e) => {
				App.Current.CheckAndDownloadUpdateAsync();
			};
		}
		// After the Frame navigates, ensure the HyperlinkButton representing the current page is selected
		private void ContentFrame_Navigated(object sender, NavigationEventArgs e)
		{
			foreach (UIElement child in LinksStackPanel.Children)
			{
				HyperlinkButton hb = child as HyperlinkButton;
				if (hb != null && hb.NavigateUri != null)
				{
					if (hb.NavigateUri.ToString().Equals(e.Uri.ToString()))
					{
						VisualStateManager.GoToState(hb, "ActiveLink", true);
					}
					else
					{
						VisualStateManager.GoToState(hb, "InactiveLink", true);
					}
				}
			}
		}

		// If an error occurs during navigation, show an error window
		private void ContentFrame_NavigationFailed(object sender, NavigationFailedEventArgs e)
		{
			e.Handled = true;
			ChildWindow errorWin = new ErrorWindow(e.Uri);
			errorWin.Show();
		}

		private Uri whereToNav;
		private SalePoints.WcfServices.UserIdentity user;
		private void ContentFrame_Navigating(object sender, NavigatingCancelEventArgs e)
		{
			var needNTLogon = AppSettingsHelper.GetAsBool("SalePoints.WCF.NTLogon");
			if (needNTLogon&&(user == null || user.IsAuthenticated==false))
			{
				WcfServices.SalePointServicesClient proxy = new WcfServices.SalePointServicesClient();
				proxy.NTLogonCompleted += new EventHandler<SalePoints.WcfServices.NTLogonCompletedEventArgs>(proxy_NTLogonCompleted);
				proxy.NTLogonAsync();

				whereToNav = e.Uri;
				e.Cancel = true;
			};
		}
		void proxy_NTLogonCompleted(object sender, SalePoints.WcfServices.NTLogonCompletedEventArgs e)
		{
			if (e.Error != null)
			{
				ChildWindow errorWin = new ErrorWindow(e.Error);
				errorWin.Show();
				if (ContentFrame.CanGoBack)
				{
					ContentFrame.GoBack();
				}
				ContentFrame.StopLoading();
			}
			else {
				user = e.Result;
				ContentFrame.Navigate(whereToNav);
			}
		}
	}
}